# importerer ulike pakker
import json
import pandas as pd
import requests
from pyjstat import pyjstat
import matplotlib.pyplot as plt
import plotly.express as px
import numpy as np
from matplotlib.patches import Polygon
import sympy as sp
# henter inn datasett for total andel konsum
postUrl = "https://data.ssb.no/api/v0/no/table/10638"
apiQuery = {
"query": [
{
"code": "KonsumInnd",
"selection": {
"filter": "item",
"values": [
"UTLK",
"NOHT",
"NONF"
]
}
},
{
"code": "ContentsCode",
"selection": {
"filter": "item",
"values": [
"Priser"
]
}
},
{
"code": "Tid",
"selection": {
"filter": "item",
"values": [
"2020"
]
}
}
],
"response": {
"format": "json-stat2"
}
}
def apiToDataframe(postUrl, query):
# postUrl som spørringen skal postes mot
# Spørringen og endepunktet til API-et kan hentes fra Statistikkbanken.
res = requests.post(postUrl, json=query)
# legger resultat i ds. DS har i tillegg en del metadata
ds = pyjstat.Dataset.read(res.text)
# skriver resultatet til to dataframes
# først dataframe med tekst
df = ds.write('dataframe')
# deretter dataframe med koder
df_id = ds.write('dataframe', naming='id')
# returnerer også ds i tilfelle en trenger metadata
return df, df_id, ds
df, df_id, ds = apiToDataframe(postUrl, apiQuery)
# lager plot for total andel konsum
fig1 = px.pie(df, values='value', names='konsumentgruppe')
# henter inn datasett for resiemåter
postUrl = "https://data.ssb.no/api/v0/no/table/10638"
apiQuery ={
"query": [
{
"code": "Reiseliv",
"selection": {
"filter": "item",
"values": [
"01.03",
"01.04",
"01.05",
"01.06"
]
}
},
{
"code": "ContentsCode",
"selection": {
"filter": "item",
"values": [
"Priser"
]
}
},
{
"code": "Tid",
"selection": {
"filter": "item",
"values": [
"2020"
]
}
}
],
"response": {
"format": "json-stat2"
}
}
def apiToDataframe(postUrl, query):
# postUrl som spørringen skal postes mot
# Spørringen og endepunktet til API-et kan hentes fra Statistikkbanken.
res1 = requests.post(postUrl, json=query)
# legger resultat i ds. DS har i tillegg en del metadata
ds1 = pyjstat.Dataset.read(res1.text)
# skriver resultatet til to dataframes
# først dataframe med tekst
df1 = ds1.write('dataframe')
# deretter dataframe med koder
df_id1 = ds1.write('dataframe', naming='id')
# returnerer også ds i tilfelle en trenger metadata
return df1, df_id1, ds1
df1, df_id1, ds1 = apiToDataframe(postUrl, apiQuery)
# lager plot for reisemåter
fig2 = px.pie(df1, values='value', names='reiselivsnæring')
# henter inn datasett for hotel
postUrl = "https://data.ssb.no/api/v0/no/table/10638"
apiQuery2 ={
"query": [
{
"code": "Reiseliv",
"selection": {
"filter": "item",
"values": [
"01.01"
]
}
},
{
"code": "ContentsCode",
"selection": {
"filter": "item",
"values": [
"Priser"
]
}
},
{
"code": "Tid",
"selection": {
"filter": "item",
"values": [
"2017",
"2018",
"2019",
"2020"
]
}
}
],
"response": {
"format": "json-stat2"
}
}
def apiToDataframe(postUrl, query2):
# postUrl som spørringen skal postes mot
# Spørringen og endepunktet til API-et kan hentes fra Statistikkbanken.
res2 = requests.post(postUrl, json=query2)
# legger resultat i ds. DS har i tillegg en del metadata
ds2 = pyjstat.Dataset.read(res2.text)
# skriver resultatet til to dataframes
# først dataframe med tekst
df2 = ds2.write('dataframe')
# deretter dataframe med koder
df_id2 = ds2.write('dataframe', naming='id')
# returnerer også ds i tilfelle en trenger metadata
return df2, df_id2, ds2
df2, df_id2, ds2 = apiToDataframe(postUrl, apiQuery2)
Innledning
Turistnæringen i Norge
Samfunnsøkonomiske effekter av turistskatt
Konklusjon og oppsummering av resultater
fig1.show()
fig2.show()
# lager plot for reisemåter
fig3 = df2.plot.bar(xlabel = 'År fra 2017-2020', ylabel= 'Konsum', color='green', title='Hotel konsum over tid')
# henter inn datasett for total andel konsum
postUrl = "https://data.ssb.no/api/v0/no/table/10603/"
apiQuery = {
"query": [
{
"code": "HovedstReise",
"selection": {
"filter": "item",
"values": [
"BPROD"
]
}
},
{
"code": "Reiseliv",
"selection": {
"filter": "item",
"values": [
"OTV",
"SEV",
"UTL",
"RBAV",
"KUV",
"SAF"
]
}
},
{
"code": "ContentsCode",
"selection": {
"filter": "item",
"values": [
"LopPriser"
]
}
},
{
"code": "Tid",
"selection": {
"filter": "item",
"values": [
"2016",
"2017",
"2018",
"2019",
"2020",
"2021"
]
}
}
],
"response": {
"format": "json-stat2"
}
}
def apiToDataframe(postUrl, query):
# postUrl som spørringen skal postes mot
# Spørringen og endepunktet til API-et kan hentes fra Statistikkbanken.
res = requests.post(postUrl, json=query)
# legger resultat i ds. DS har i tillegg en del metadata
ds = pyjstat.Dataset.read(res.text)
# skriver resultatet til to dataframes
# først dataframe med tekst
df = ds.write('dataframe')
# deretter dataframe med koder
df_id = ds.write('dataframe', naming='id')
# returnerer også ds i tilfelle en trenger metadata
return df, df_id, ds
df, df_id, ds = apiToDataframe(postUrl, apiQuery)
df.drop(columns = ['hovedstørrelse', 'statistikkvariabel'])
fig3 = px.pie(df, values='value', names='reiselivsnæring')
fig3
import matplotlib.pyplot as plt
# x axis values
x1 = [1,2,3,4,5,6, 7, 8, 9, 10]
# corresponding y axis values
y1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# corresponding y axis values
y2 = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
# plotting the points
plt.plot(x1, y1, label='Tilbud')
plt.plot(x1, y2, label='Etterspørsel')
# setting x and y axis range
plt.ylim(1,10)
plt.xlim(1,10)
plt.axhline(y = 5.5444, xmin = 0, xmax = 0.5, linestyle = 'dashed', color='k')
plt.axvline(x = 5.5444, ymin = 0, ymax = 0.5, linestyle = 'dashed', color='k')
# naming the x axis
plt.xlabel('x - axis')
# naming the y axis
plt.ylabel('y - axis')
# fjerner x og y verdier
plt.xticks([])
plt.yticks([])
# giving a title to my graph
plt.title('Likevekt mellom Etterspørsel og Tilbud')
plt.legend()
# function to show the plot
plt.show()
# definer symbolene som vi kommer til å bruke
x,p,t,a,b,A,B=sp.symbols('x p t a b A B', positive=True, real=True)
# Etterspørsel
def x_d(p,a,b, t):
return a - b*(p-t)
#Tilbud
def x_s(p,A,B):
return -A+B*(p)
likev=sp.Eq(x_d(p,a,b,t),x_s(p,A,B))
likev
eq_d=sp.Eq(x,x_d(p,a,b, t))
eq_s=sp.Eq(x,x_s(p,A,B))
sol_dict=sp.solve ((eq_d, eq_s), (p,x))
# likevektsbetingelse for x kvantum og p pris
print('Pris:')
display(sol_dict[p])
print('Kvantum:')
display(sol_dict[x])
Pris:
Kvantum:
# total proveny
proveny = sp.lambdify((a,b,A,B,t), t*sol_dict[x])
print('Proveny:')
proveny(a,b,A,B,t)
Proveny:
import matplotlib.pyplot as plt
# lager linje verdier
x1 = [1,2,3,4,5,6, 7, 8, 9, 10]
y1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y2 = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
y3 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
# plotter de forskjellige linje verdiene
plt.plot(x1, y1, label='Tilbud')
plt.plot(x1, y2, label='Etterspørsel')
plt.plot(x1, y3, label='Tilbud etter skatt')
# setter x og y limit
plt.ylim(1,10)
plt.xlim(1,10)
# lager ulike visningslinjer
plt.axhline(y = 5.5444, xmin = 0, xmax = 0.5, linestyle = 'dashed', color='k')
plt.axvline(x = 5.5444, ymin = 0, ymax = 0.5, linestyle = 'dashed', color='k')
plt.axhline(y = 6, xmin = 0, xmax = 0.45, linestyle = 'dashed', color='k')
plt.axvline(x = 5, ymin = 0, ymax = 0.55, linestyle = 'dashed', color= 'k')
x = np.linspace(1, 10)
# lager ulike markerte områder
rectangle = plt.Rectangle((0,5),5, 1, fc='red', alpha = 0.3, label = 'Skatteproveny')
plt.gca().add_patch(rectangle)
pts = np.array([[0,6], [0,11], [5,6]])
p = Polygon(pts, alpha = 0.3, label = 'konsumentoverskudd')
plt.gca().add_patch(p)
pts1 = np.array([[0,0], [0,5], [5,5]])
p1 = Polygon(pts1, alpha = 0.3, label = 'produsentoverskudd', color = 'green')
plt.gca().add_patch(p1)
pts2 = np.array([[5,5], [5.5,5.5], [5,6]])
p1 = Polygon(pts2, alpha = 0.3, label = 'dødvektstap', color = 'yellow')
plt.gca().add_patch(p1)
# lager pil for å vise endring
plt.arrow(7,7.1,0,0.4,width=0.1)
# lager punkt tekst
plt.text(5, 6, 'Skatt')
plt.text(5.5444, 5.5, 'Uten Skatt')
plt.text(5.5844, 1, 'x1')
plt.text(5, 1, 'x2')
plt.text(1, 6.2, 'y2')
plt.text(1, 5.5844, 'y1')
# setter navn til aksene
plt.xlabel('kvantum')
plt.ylabel('pris')
# setter tittel
plt.title('Likevekt mellom Etterspørsel og Tilbud')
plt.legend()
plt.show()
import matplotlib.pyplot as plt
# lager en ny linjeverdi
y4 = [10, 8, 6, 4, 2, 0, 0, 0, 0, 0]
# plotter linjeverdier
plt.plot(x1, y1, label='Tilbud')
plt.plot(x1, y4, label='Etterspørsel')
plt.plot(x1, y3, label='Tilbud 2')
# setter x og y limit
plt.ylim(1,10)
plt.xlim(1,10)
# lager ulike visningslinjer
plt.axhline(y = 4.65, xmin = 0, xmax = 0.3, linestyle = 'dashed', color='k')
plt.axvline(x = 3.65, ymin = 0, ymax = 0.4, linestyle = 'dashed', color='k')
plt.axhline(y = 4, xmin = 0, xmax = 0.34, linestyle = 'dashed', color='k')
plt.axvline(x = 4, ymin = 0, ymax = 0.34, linestyle = 'dashed', color= 'k')
x = np.linspace(1, 10)
# lager ulike markerte områder
rectangle = plt.Rectangle((0,3.65), 3.65, 1, fc='red', alpha = 0.3, label = 'Skatteproveny')
plt.gca().add_patch(rectangle)
pts = np.array([[0,4.65], [0,12], [3.65,4.65]])
p = Polygon(pts, alpha = 0.3, label = 'konsumentoverskudd')
plt.gca().add_patch(p)
pts1 = np.array([[0,0], [0,3.65], [3.65,3.65]])
p1 = Polygon(pts1, alpha = 0.3, label = 'produsentoverskudd', color = 'green')
plt.gca().add_patch(p1)
pts2 = np.array([[3.65,3.65], [4,4], [3.65,4.65]])
p1 = Polygon(pts2, alpha = 0.3, label = 'dødvektstap', color = 'yellow')
plt.gca().add_patch(p1)
# lager pil for å vise endring
plt.arrow(7,7.1,0,0.4,width=0.1)
# lager punkt tekst
plt.text(3.65, 4.65, 'Skatt')
plt.text(4, 4, 'Uten Skatt')
# fjerner x og y verdier
plt.xticks([])
plt.yticks([])
# setter navn til aksene
plt.xlabel('kvantum')
plt.ylabel('pris')
# setter tittel
plt.title('Likevekt mellom Etterspørsel og Tilbud')
plt.legend()
plt.show()